package com.itaming.lycheeframework.support.utils;

import java.util.Arrays;
import java.util.List;
import java.util.function.Function;

/**
 * NullSafe工具类
 *
 * @author A.Ming
 */
public class NullSafeUtil {

    /**
     * {@code null} 安全的函数调用
     *
     * @param object 对象
     * @param fn     函数
     * @return 函数返回结果，如果 {@code object} 为 {@code null}，返回 {@code null}
     */
    public static <T, R> R resolve(T object, Function<T, R> fn) {
        return object == null ? null : fn.apply(object);
    }

    /**
     * {@code null} 安全的 {@link CharSequence#toString()} 调用
     *
     * @param object
     * @return 字符串，如果 {@code object} 为 {@code null}，返回 {@code null}
     */
    public static String toString(Object object) {
        return resolve(object, Object::toString);
    }

    /**
     * {@code null} 安全的 {@link Arrays#asList(Object...)} 调用
     *
     * @param elements 元素
     * @return 新的 {@code List}，如果 {@code elements} 为 {@code null}，返回 {@code null}
     */
    public static <E> List<E> asList(E[] elements) {
        return resolve(elements, Arrays::asList);
    }

}
